\chapter*{Renderman – альтернативы RAT}
  

 Возвращаясь к теме Renderman + Maya, я хотел бы
    сказать несколько (тысяч) слов о альтернативах RAT. Ни для кого не
    секрет (и я попытался передать это ощущение в своей главе), что
    связка Renderman Pro Server + RAT + Maya близка к идеалу; ни для
    кого также не секрет, к сожалению, что идеальной она не является. О
    некоторых проблемах данной связки мы уже говорили; кратко
    просуммируем сказанное:
  
     высокая цена комплекта
     ухудшающееся качество кода в последних версиях
      RAT
     неудовлетворённость пользователей интерфейсом и
      возможностями
     и ещё раз - высокая цена – увы, для многих этот
      фактор критичен.
  
  

 И поэтому неудивительно, что существуют несколько
    альтернативных RAT’у решений, позволяющих решать тот же круг задач,
    но не отягощённых присущими продукту компании Пиксар проблемами. В
    преддверии самой интересной части этой главы, посвященной
    оптимизации рендеринга и хитростям, применяемым в реальном
    продакше, мы не будем тратить ваше время на подробные описания и
    уроки, взамен предъявив вам список основных решений, их
    положительные и отрицательные черты и наше заключение по каждому из
    продуктов. Логичным представляется разделить наш краткий обзор на
    несколько основных направлений:
  
     Альтернативные prman’у рендереры
     Плагины и средства для экспорта
      геометрии
     Программы для работы с шейдерами
  
  

 И опять я вас обманул. У нас будет ещё и пункт
    номер ноль.

  \section*{Альтернативные интерфейсы для MTOR}
  

 Именно так – альтернативные интерфейсы. Для MTORа.
    Казалось бы, в чём проблема?
  

 А проблема очень простая – существующий визуальный
    интерфейс RenderMan Globals, написанный в закудыкины времена на
    языке программирования Tcl, выглядит чужеродным объектом в теле
    Maya. Более того, для продвинутых пользователей продукта это
    торжество программирования со множеством окон и табов не кажется
    оптимальным. Именно поэтому существуют несколько различных скриптов
    на Mel, которые предлагают альтернативный подход к настройкам MTOR
    – более удобный, скоростной и “родной” – ведь интерфейс самой Maya
    тоже написан на Mel. Как образец творческого подхода к вопросу,
    можно указать скрипт Юрия Мешалкина под названием mtorRender (вы
    можете найти его на диске):
  

 \gr{image083}
  

 Человеку, только начинающему разбираться с
    Renderman Pro Server и MTOR, будет полезнее пока оставаться в
    знакомом окружении родного интерфейса RenderMan Globals (как
    минимум для того, чтобы не было проблем с прохождением туториалов),
    но когда его рамки начнут вам мешать – обратитесь к альтернативным
    решениям.

  \section*{Альтернативные Renderman-совместимые рендереры}
  

 В списке Renderman-совместимых рендереров \footnote{http://www.dotcsw.com/links.html},
    любезно поддерживаемом одним из разработчиков такого рендерера
    (Dot C Software, продукт
    под названием Render Dot C), на апрель
    2005го года находилось 23 продукта, из которых доступны для покупки
    или (в случае open source) бесплатного скачивания – 13 штук. Все
    они обладают теми или иными достоинствами и недостатками, например,
    бесплатный Pixie – использует OpenGL и, соответственно, ресурсы
    видеокарты для ускорения просчёта сцены; недорогой AIR обгоняет
    всех конкурентов по набору возможностей и по этому параметру
    единственный приблизился к prman. Флагманом
    Renderman-совместимо-рендеростроения с открытым исходным кодом
    является Aqsis – достаточно медленный, но старательно пытающийся
    стать реальным противовесом коммерческим приложениям. Являясь
    Renderman-совместимыми (а чтобы называться таким, рендерер должен
    строго придерживаться основных положений стандарта), все эти
    продукты могут быть использованы в качестве замены Renderman Pro
    Server, в особенности если вы не использовали какие-то
    специфические для prman особенности SL и RIB – более того, вы
    можете их использовать вместе с MTOR и SLIM, специальным образом
    настроив последние.
  

 Но меня не оставляет мысль, что единственным
    реальным соперником prman’а среди Renderman-совместимых является
    де-юре не-Renderman-совместимый Gelato.Я был бы счастлив не
    разделять этот скептицизм с вами – но таковы факты.
 
 \section*{Экспорт из Maya в RIB – Mel}
  

 При всей своей простоте формат файлов RIB в том
    виде, в котором он описан в спецификации стандарта – достаточно
    объёмен и включает в себя много различных возможностей и удобств. С
    другой стороны, Maya поддерживает
    много различных видов геометрии, материалов и эффектов. Поэтому
    задача вывода сцены из Maya в RIB посредством написания скриптов на
    Mel является исключительно академическим упражнением – на простых
    сценах рендерер не может показать себя во всей своей красе; на
    сложных сценах слабым звеном становится сам интерпретируемый скрипт
    (выросший к тому моменту до нереальных размеров). Тем не менее, для
    простых экспериментов или для случаев, когда пасуют готовые
    продукты - этот подход хорош.
  
\section*{Экспорт из Maya в RIB - не Mel}
  

 Меня всегда удивляло, сколько всего интересного
    поставляется в комплекте с Maya. Про универсальный конвертер
    графических файлов мы уже говорили; а вот знаете ли вы, что в
    стандартной поставке Майки можно найти – плагин для экспорта
    геометрии в RIB? Удивительно, но факт – ribExport.mll поставляется
    со всеми версиями Maya, начиная с первой, и позволяет делать
    простой экспорт геометрии – и более того, плагин этот поставляется
    с полным исходным кодом. Ни для каких серьёзных задач данное
    решение не предназначено; качество и читаемость RIB-ов, которые оно
    производит, оставляет желать лучшего. Тем не менее, такая
    функциональность в рамках Maya существует – и при очень большом
    желании вы можете взять исходники и попробовать их модифицировать
    для своих нужд. Но мой вам совет – при первой же возможности
    воспользуйтесь такими плагинами, как MayaMan или Liquid.
  
\section*{MayaMan}
  

 Одними из первых, кого не удовлетворили качество и
    ценовые запросы MTOR, стали антиподы – австралийцы из студии Animal
    Logic. Уже одно происхождение продукта по всей видимости даёт ему
    хорошую фору по отношению к конкурентам – находясь на другой
    стороне нашего шарика, антиподы всё время висят вниз головой, что
    помимо постоянного притока крови к голове даёт немалую
    раскрепощённость и отсутствие дурных привычек, присущих голивудской
    индустрии.
  

 Однако, шутки в сторону. Бесплатная оценочная
    версия доступна на сайте www.animallogic.com – вы можете
    попросить временную лицензию, и скорее всего, вам её дадут – мне,
    как видите, лицензию дали.
  

 Для того, чтобы попробовать MayaMan в деле,
    откройте свою любимую сцену или создайте новую и подключите плагин.
    В главном меню Maya появился новый пункт:
  

 \gr{image085}
  

 Как обычно в нашей главе, импортируем бедную
    овечку, переводим её в сабдивы и начинаем искать, как же нам её
    отрендерить: MayaMan => MayaMan Globals (имя команды в меню
    ничего не напоминает?):
  

 \gr{image087}
  

 Первое же отличие, которое бросается в глаза – это
    поддержка различных Renderman-совместимых рендереров. MayaMan
    изначально разработан с тем расчётом, чтобы быть совместимым с
    максимально возможным числом рендереров, предоставляя им одинаковые
    возможности – и при этом максимально скрывая разницу между ними.
    Данная стратегия дала свои результаты – учитывая различные версии
    одинаковых продуктов, плагин поддерживает 53 различных рендерера,
    от самых старых и уже не встречающихся в природе – до самых
    продвинутых и ещё не вышедших из стадии предварительного
    тестирования.
  

 Для
    продвинутых: я получил эти цифры,
    изучив содержимое директории /mayaman/renderers. Файлы, находящиеся
    в этой папке, содержат все необходимые настройки для всех
    поддерживаемых рендереров, и представляют из себя весьма
    увлекательное чтиво.
  

 Нас пока что удовлетворяют настройки по умолчанию,
    поэтому просто вызываем MayaMan => Preview (я предварительно
    добавил в сцену большой светлый шарик, чтобы убрать чёрный
    фон):
  

 \gr{image089}
  

 Какой конфуз! В отличие от MTOR, MayaMan на данный
    момент не поддерживает subdivision surfaces от Maya Unlimited.
    Однако мы всё равно можем отрендерить полигоны как сабдивы – и для
    этого воспользуемся кастомными атрибутами, которые MayaMan
    позволяет добавить к любому объекту в сцене.
  

 Для
    продвинутых: если не считать конфуз
    с майскими SDS, официально MayaMan поддерживает и экспортирует в
    RIB любую геометрию, кроме PaintFX – впрочем, PaintFX в RIB не
    экспортирует ни один из известных плагинов. Этот вопрос – “Как
    отрендерить Paint Effects в Renderman” в своё время был самым
    задаваемым в русских форумах, посвященных Renderman; нам пришлось
    даже вынести его в FAQ. Впрочем, и у этой проблемы есть возможное
    решение – вывести данные из PaintFX в виде кривых не составляет
    особого труда, загвоздка лишь в применяемых кистях и их
    отрисовке.
  

    Удаляем из сцены нашу овечку и импортируем её заново. На этот раз
    мы не будем переводить её в сабдивижны штатными майскими
    средствами; вместо этого, выделяем ту геометрию, которую нужно
    отобразить в виде SDS и вызываем пункт меню MayaMan => Add Model
    Attributes. Затем в окне редактирования атрибутов в разделе
    SubDivision Surface выставляем нужную галочку и:
  

 \gr{image091}
  

 получаем наше животное в целости и сохранности. Но
    это не так интересно – на протяжении нашей главы мы уже с дюжину
    раз различными методами рендерили бедного барашка; попробуем теперь
    узнать, какие дополнительные преимущества перед MTOR имеет MayaMan.
    Для этого назначим на нашу модель любой материал из HyperShade и
    посмотрим, что произойдёт (в данном случае мы назначили Blinn с
    присоединённым к каналу цвета brownian):
  

 \gr{image093}
  

 Оказывается, как и Mango, MayaMan поддерживает
    материалы HyperShade и конвертирует их в шейдеры RenderMan; в
    отличие от Mango, MayaMan действительно создаёт новые шейдеры –
    впрочем, делает это очень хитро, давайте посмотрим получившийся у
    нас шейдер (его можно найти в поддиректории нашего проекта
    /mayaman/sheep1/shaders/; я убрал заголовок шейдера для
    краткости):
  
\begin{lstlisting}[frame=single, framerule=0pt, framesep=10pt, xleftmargin=10pt, xrightmargin=10pt]
{
  

   PROFILE("begin");
  

#pragma
    nolint
  

   SURFACE_TEMPS;
  

   APPLY_SLICE_PLANE else {
  

     PROFILE("SETUP 0 BLINN");
  

     BLINN_SETUP(v_0_);
  

     if(only_do_opacity == 0) {
  

       PROFILE("SETUP 1
    BROWNIAN");
  

       BROWNIAN_SETUP(v_1_);
  

       PROFILE("SETUP 2
    PLACE3DTEXTURE");
  

       PLACE3DTEXTURE_SETUP(v_2_);
  

       PROFILE("SIMULATE 2
    PLACE3DTEXTURE");
  

       PLACE3DTEXTURE_SIM(v_2_);
  

       v_1_placementMatrix  =
    v_2_worldInverseMatrix[0];
  

       PROFILE("SIMULATE 1
    BROWNIAN");
  

       BROWNIAN_SIM(v_1_);
  

       v_0_color            = color(v_1_outColor);
  

     }
  

     PROFILE("SIMULATE 0 BLINN");
  

     BLINN_SIM(v_0_);
  

     Ci = v_0_outColor;
  

     Oi = Os;
  

   }
  

   DEEP_SHADOW_OPACITY_HANDLER
  

   PROFILE("end");
  

   SURFACE_DEBUG_HOOK
  

 }
\end{lstlisting}
  

 Не очень похоже на обычный шейдер, написанный на
    Renderman SL, правда? Тем не менее, это обычый шейдер – вся
    хитрость состоит в том, что в этом шейдере очень широко
    используются такие возможности языка SL, как макросы и подстановка
    значений. Если мы пропустим этот файл через препроцессор cpp, то
    сможем увидеть истинное лицо нашего шейдера – впрочем, я не буду
    сюда его вставлять из-за достаточно большого размера – книжка-то у
    нас не резиновая.
  

 Для
    продвинутых: те же, кто не
    поленится заглянуть в получившиеся 40 килобайт (почти 1200 строк)
    кода на SL, узнают много нового о том, как на Renderman SL
    сымитировать ноды из Maya HyperShade, да и вообще – про внутреннее
    устройство Maya и про рендеринг вообще.
  

 Итак, MayaMan конвертирует материалы из Maya в
    Renderman SL – и тем самым серьёзно упрощает работу для тех, кто
    только начинает пробовать на зуб новый рендерер. Кроме того, вы
    можете использовать свои собственные шейдеры в качестве материалов
    – и даже больше, вы можете встраивать материалы, написанные на
    языке SL, в виде специальных нод HyperShade – и эти ноды будут
    использованы при рендеринге через MayaMan.
  

 Нам же осталось указать, что всё возможности и
    настройки MayaMan доступны как через Mel (посредством ноды под
    весёлым названием MayaManNugget), так и из командной строки – при
    помощи программы mayaman\_batch\_m6.exe (или mayaman\_batch\_m65.exe, в
    зависимости от используемой вами версии Maya).
  

 Для
    продвинутых: несколько простых
    скриптов на Mel, которые упростят вашу работу с MayaMan. Во-первых,
    узнаем, какие вообще параметры есть у ноды MayaManNugget – и,
    соответственно, у всего плагина:
  
\begin{lstlisting}[frame=single, framerule=0pt, framesep=10pt, xleftmargin=10pt, xrightmargin=10pt]
string \$MayaManOptions[] = `listAttr MayaManNugget`;
for ($eachParameter in $MayaManOptions) print(eachParameter  + "\n");
\end{lstlisting}  

 Во-вторых,
    небольшой скрипт, который можно вытянуть на полку, чтобы быстро
    переключаться в режим предварительного просмотра – и ухудшеного
    качества (о значении всех этих устанавливаемых параметров мы будем
    говорить уже очень скоро):
  

{\it   } setAttr
    "MayaManNugget.ShadingRate" 16;
  

   setAttr "MayaManNugget.PixelSamplesX"
    1;
  

   setAttr "MayaManNugget.PixelSamplesY"
    1;
  

   setAttr "MayaManNugget.PixelFilterX"
    2;
  

{\it    setAttr}  "{\it MayaManNugget}{\it .}{\it PixelFilterY}"
    2;
  

 И в-третьих,
    антипод скрипта “во-вторых”:
  

{\it   } setAttr
    "MayaManNugget.ShadingRate" 1;
  

   setAttr "MayaManNugget.PixelSamplesX"
    3;
  

   setAttr "MayaManNugget.PixelSamplesY"
    3;
  

   setAttr "MayaManNugget.PixelFilterX"
    3;
  

{\it    setAttr}  "{\it MayaManNugget}{\it .}{\it PixelFilterY}"
    3;
  

 Суммируя сказанное: MayaMan специально разработан в
    расчёте на использование с несколькими Renderman-совместимыми
    рендерерами, у него более удобный (на мой взгляд) интерфейс, чем у
    MTOR, но беднее возможности экспорта геометии. MayaMan поддерживает
    материалы, разработанные в HyperShade, используется в студии Animal
    Logic в работе над фильмами и является, по сути, самой сильной
    альтернативой MTORу из существующих.
  

 Помимо MayaMan, австралийские разработчики также
    предлагают аналогичные плагины для 3dsmax и Softimage с
    соответсвующими названиями – MaxMan и SoftMan. Если вы пользуетесь
    “максом” или всё ещё не перешли с “софта” на XSI –хороший повод для
    того, чтобы попробовать Renderman, теперь есть и у вас.
 
 \section*{Liquid}
  

 Существует целая каста людей, которые по
    принципиальным соображениям пользуются исключительно бесплатным
    программным обеспечением, предоставляемым исключительно с исходным
    кодом. Бальзамом на душу таким людям будет наш следующий плагин для
    Maya – Liquid.
  

 Разработанный Колином Донкастером (Colin Doncaster), лИквид был первоначально
    предназначен для нужд студии Weta Digital (мы ещё не раз встретим
    название этой студии в нашей главе), а именно – для фильма
    “Властелин Колец”. Подобное требование наложило свой отпечаток на
    внутреннюю структуру и функциональность плагина, который был
    максимально заточен под большие сцены, сложные написанные руками
    шейдеры и большое количество текстур – и не очень-то дружественен
    по отношению к неопытным рендерменщикам. 
  

 Впрочем, в 2002м году Колин покинул студию Вета и
    забрал Liquid с собой. После долгих раздумий, он выложил исходный
    код плагина на сайте http://liquidmaya.sourceforge.net/ -
    и с этого момента фактически прекратил участие в судьбе своего
    проекта. Впрочем, его программа попала в хорошие руки и целая
    группа разработчиков занялась доводкой и улучшением продукта,
    выкладывая всё новые и новые версии плагина и его исходного кода.
    Отрадно отметить, что среди новых родителей Liquid’а есть и
    русскоязычные программисты.
  

 Из всех рассмотренных нами плагинов для работы с
    Renderman, Liquid является, по сути, самым неудобным в повседневной
    работе. С другой стороны, у этого плагина огромный потенциал –
    изначально ориентированная на задачи реального кинопроизводства
    архитектура, заложенная в эту архитектуру скорость работы и
    гибкость дают надежду на дальнейшее развитие этого продукта –
    например, некоторые студии вовсю используют Liquid в качестве
    основы для своих собственных экспортеров и студийных
    пайплайнов.
  

 Впрочем, в списке этих студий больше нет Weta
    Digital. После ухода Колина оказалось, что второй и третий фильм
    трилогии “Властелин Колец” серьёзно повысили требования к плагину –
    а исправлять его было уже некому, да и копирайт на код остался у
    автора. Поэтому в студии внедрили новое решение, по иронии судьбы
    (а скорее, обыгрывая предыдущий продукт - Liquid) названное
    Solid.
  

 А мы тем временем от средств вывода геометрии
    перейдём к редактированию шейдеров. Вот вы, молодой и красивый (а
    ещё лучше – молодая и красивая), сидите перед компьютером, в
    плейере загружен последний альбом любимой группы, пакет с соком
    открыт, вы кладёте руки на клавиатуру – и сталкиваетесь с одной из
    самых неприятных сторон Renderman Shading Language – писать на нём
    шейдеры вручную трудно и долго, в особенности для тех из вас, кто
    привык к красивым интерфейсам и большим кнопкам. Множество компаний
    и просто умельцев прикладывает массу усилий для того, чтобы
    облегчить труд шейдерописателя – начиная с модулей для подсветки
    синтаксиса SL в самых популярных текстовых редакторах (вот вы
    смеётесь, а это очень важно и удобно) и заканчивая визуальными
    конструкторами, позволяющими создавать шейдеры при помощи мыши.
    Наибольший интерес для новичков (равно как и просто очень занятых
    людей) представляет именно последняя категория программ.
    Воспользуюсь служебным положением  и обойду вниманием такие входящие
    в эту категорию продукты, как ShadeTree, Vshade и Shrimp. Вместо
    этого мы поговорим о программе, автором которой я являюсь – о
    ShaderMan.